<dialog>
El elemento <dialog>
proporciona una manera de representar cuadros de diálogo (modales) en HTML que permiten al usuario interactuar sin abandonar la página actual. Estos cuadros de diálogo pueden ser ventanas de confirmación, formularios, u otros tipos de notificaciones que requieren interacción del usuario.
<dialog>
El elemento <dialog>
representa un cuadro de diálogo en la interfaz. Es un contenedor de contenido que se puede mostrar y ocultar mediante JavaScript, lo que permite implementar modales sin la necesidad de frameworks externos o CSS avanzado.
<dialog>
<dialog>
<button autofocus onclick="this.parentNode.close()">Cerrar</button>
<p>¡Este diálogo tiene un fondo interactivo (backdrop) genial!</p>
</dialog>
<button onclick="document.querySelector('dialog').showModal()">
Mostrar diálogo
</button>
<dialog>
define el contenido del diálogo.showModal()
, lo que lo hace aparecer en pantalla con un fondo gris (backdrop).close()
, que permite que el usuario interactúe de nuevo con el contenido principal de la página.<dialog>
El elemento <dialog>
tiene varias métodos y propiedades que permiten interactuar con él de una manera flexible y eficiente:
show()
: Muestra el diálogo sin aplicarle una modalidad. El diálogo aparece sobre el contenido principal sin impedir que el usuario interactúe con la página.
<button onclick="document.querySelector('dialog').show()">
Mostrar diálogo sin modalidad
</button>
showModal()
: Muestra el diálogo de manera modal. Esto significa que el usuario no puede interactuar con el resto del contenido de la página hasta que el diálogo se cierre.
<button onclick="document.querySelector('dialog').showModal()">
Mostrar diálogo con modalidad
</button>
close()
: Cierra el diálogo. Esto se puede llamar directamente desde el código JavaScript o mediante la acción de un botón dentro del diálogo.
<dialog id="myDialog">
<button onclick="document.getElementById('myDialog').close()">Cerrar</button>
<p>Diálogo cerrado con el método close().</p>
</dialog>
<dialog>
open
: Este atributo booleano indica si el diálogo está actualmente abierto o no.
open
está presente, el diálogo se considera visible en la página.<dialog open>
<p>Este diálogo está abierto desde el inicio.</p>
</dialog>
returnValue
: Esta propiedad se utiliza para determinar el valor devuelto cuando el diálogo se cierra.
const myDialog = document.querySelector('dialog');
myDialog.returnValue = 'valor devuelto';
myDialog.close();
console.log(myDialog.returnValue); // 'valor devuelto'
<dialog>
Cuando un cuadro de diálogo se muestra de manera modal con showModal()
, se crea un backdrop (fondo gris) que bloquea la interacción con el contenido de la página principal. Esto permite al usuario concentrarse en la acción requerida por el diálogo.
Aunque el elemento <dialog>
tiene un fondo predeterminado cuando se muestra modal, se puede personalizar su estilo mediante CSS.
dialog::backdrop {
background-color: rgba(0, 0, 0, 0.5);
}
<dialog id="styledDialog">
<h2>Estilizado del Diálogo</h2>
<p>Este diálogo tiene estilos personalizados para una mejor apariencia.</p>
<button onclick="document.getElementById('styledDialog').close()">Cerrar</button>
</dialog>
<button onclick="document.getElementById('styledDialog').showModal()">
Mostrar diálogo estilizado
</button>
<style>
dialog {
border: solid 1px #ccc;
border-radius: 8px;
padding: 20px;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
}
dialog::backdrop {
background-color: rgba(0, 0, 0, 0.7);
}
</style>
Una de las formas más comunes de usar un diálogo es como un formulario para que el usuario ingrese información. A continuación, se muestra un ejemplo completo:
<dialog id="formDialog">
<form method="dialog">
<h3>Formulario de Ejemplo</h3>
<label for="username">Nombre de usuario:</label>
<input type="text" id="username" name="username" required>
<menu>
<button value="cancel">Cancelar</button>
<button value="confirm">Confirmar</button>
</menu>
</form>
</dialog>
<button onclick="document.getElementById('formDialog').showModal()">
Abrir formulario
</button>
method="dialog"
permite que el formulario se cierre automáticamente cuando se haga clic en uno de los botones del formulario (Cancelar
o Confirmar
).showModal()
para que el usuario no pueda interactuar con la página hasta que complete el formulario.El uso del elemento <dialog>
mejora la accesibilidad porque proporciona un mecanismo semántico para los diálogos y modales. Sin embargo, es importante tener en cuenta lo siguiente:
autofocus
en un botón o campo de entrada.